package utils

import (
	"encoding/json"
)

type FileService struct {
}

type UploadServerStruct struct {
	Response struct {
		ImageURL string `json:"image_url"`
	} `json:"response"`
	Name string `json:"name"`
}

type Response struct {
	ImageURL string `json:"image_url"`
}

type FileReturnStruct struct {
	Name string `json:"name"`
	URL  string `json:"url"`
}

// 上传文件处理. 改为string类型 逗号间隔
func FileToString(fields []UploadServerStruct) string {
	var returnMap []map[string]interface{}
	if len(fields) == 0 {
		return ""
	}

	for _, v := range fields {
		returnMap = append(returnMap, map[string]interface{}{
			"name": v.Name,
			"url":  v.Response.ImageURL,
			"response": map[string]interface{}{
				"image_url": v.Response.ImageURL,
			},
		})
	}

	jsonByte, _ := json.Marshal(returnMap)
	return string(jsonByte)
}

// 单图片处理
func SingleFileToString(filedString string) string {
	// 如果输入为空,直接返回空字符串
	if filedString == "" {
		return ""
	}

	// 尝试解析现有的 JSON 字符串
	data := StringJsonToMap(filedString)
	if len(data) > 0 {
		// 如果已经是正确的格式,直接返回
		return filedString
	}

	// 如果不是 JSON 格式,则构造新的格式
	returnMap := map[string]interface{}{
		"name": "",
		"url":  filedString,
		"response": map[string]interface{}{
			"image_url": filedString,
		},
	}

	jsonByte, _ := json.Marshal(returnMap)
	return string(jsonByte)
}

// 字符串文件 转数组
func StringJsonToMap(filedString string) []map[string]interface{} {
	returnData := make([]map[string]interface{}, 0)

	// 检查输入字符串是否为空
	if filedString == "" {
		return returnData
	}

	// 尝试解析 JSON 字符串
	json.Unmarshal([]byte(filedString), &returnData)
	return returnData
}

// 字符串文件 转数组
func StringJsonToMapFront(filedString string) (returnData []string) {
	returnData = []string{}
	imageInfo := []struct {
		Name     string `json:"name"`
		Response struct {
			ImageURL string `json:"image_url"`
		} `json:"response"`
		URL string `json:"url"`
	}{}

	// 检查输入字符串是否为空
	if filedString == "" {
		return returnData
	}

	// 尝试解析 JSON 字符串
	json.Unmarshal([]byte(filedString), &imageInfo)

	for _, v := range imageInfo {
		if v.URL != "" {
			returnData = append(returnData, v.URL)
		} else {
			returnData = append(returnData, v.Response.ImageURL)
		}
	}

	return returnData
}

// 单图片字符串转URL
func SingleStringToUrl(filedString string) string {
	if filedString == "" {
		return ""
	}

	// 定义为数组类型
	var imageInfoArray []struct {
		Name     string `json:"name"`
		Response struct {
			ImageURL string `json:"image_url"`
		} `json:"response"`
		URL string `json:"url"`
	}

	// 尝试解析 JSON 字符串
	if err := json.Unmarshal([]byte(filedString), &imageInfoArray); err != nil {
		return filedString // 如果解析失败，返回原始字符串
	}

	// 如果数组为空，返回空字符串
	if len(imageInfoArray) == 0 {
		return ""
	}

	// 取第一个元素的URL
	if imageInfoArray[0].URL != "" {
		return imageInfoArray[0].URL
	}
	return imageInfoArray[0].Response.ImageURL
}
